package dao;


import model.MarketRegion;
import org.apache.ibatis.session.SqlSession;
import util.MyBatisUtil;

import java.util.List;

/**
 * MyBatis来实现
 * 1. 引入mybatis的依赖 mybatis
 * 2. 引入MyBatis的配置文件 xml（mybatis.xml）
 * (1) 连接：driver、url、username、password
 * (2) 映射文件（MarketRegionDao.xml）
 * 3. 开发映射文件
 * namespace：命名空间 → 当前映射文件的唯一标识，不同的映射文件使用不同的命名空间
 * → 后面会有多个映射文件 → 不同业务(功能)的sql语句放在不同的映射文件中
 * 给SQL语句提供id → 标签 → (Prepared)Statement
 * → 查询select 新增insert 修改update 删除delete
 * 4. PreparedStatement 占位符 映射文件中写的就不是？ → #{}是映射文件中的占位符
 */
public class MarketRegionDaoImpl2 implements MarketRegionDao{
    @Override
    public MarketRegion selectByName(String name) {
        //获取sqlSession
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        //执行sql语句、注意选择合适的方法
        MarketRegion marketRegion = sqlSession.selectOne("regiondao.id1", name);
        //返回结果
        return marketRegion;
    }

    @Override
    public MarketRegion selectByPrimaryKey(Integer id) {
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        MarketRegion marketRegion = sqlSession.selectOne("regiondao.id2", id);
        return marketRegion;
    }

    @Override
    public int insert(MarketRegion marketRegion) {
        //获取sqlSession时（执行事务时）设置了自动提交
        SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
        int affectedRows = sqlSession.insert("regiondao.id3", marketRegion);
        //sqlSession.commit();
        return affectedRows;
    }

    @Override
    public List<MarketRegion> selectByType(Byte type) {
        SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
        // List<MarketRegion> 作为返回值resultType怎么写
        // 1. java.util.List                          ×
        // 2. com.cskaoyan.demo1.model.MarketRegion   √
        List<MarketRegion> regionList = sqlSession.selectList("regiondao.id4", type);
        return regionList;
    }
}
